#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QPixmap>//一种图像表示形式，作为绘图设备，使用QLabel的子类可在屏幕上显示QPixmap
#include<QTimer>//定时器
#include<QPainter>//绘制图像
#include<QPen>//画笔
#include<random>//随机函数
#include<algorithm>//算法
#include"fruit.h"
using namespace std;

/*
override:C++11中的关键字，在成员函数的声明或者定义中，override确保该函数为虚函数，并覆写来自基类的虚函数


*/

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget() override;
    void connection();
    void keyPressEvent(QKeyEvent *event) override;
    void drawFruits();
    double distanct(const QPointF &p1,const QPointF &p2);
    void dealCrash();
    void addFruits();
    bool isFailed();
    bool isWin();
    double module(const QPointF&p);
    void mouseMoveEvent(QMouseEvent *ev) override;
    void mouseReleaseEvent(QMouseEvent *ev) override;
    pair<QPointF,QPointF>vectorDecomposition(const QPointF&source,const QPointF&target);


private slots:
    void on_btn_quit_clicked();

private:
    Ui::Widget *ui;
    default_random_engine _e;//C++11中获取随机数的新方法
    const int _width=541; //游戏区域的宽度
    const int _height=911; //游戏区域的高度
    const int _mse=10;
    const int _upper_Boundary=120;
    double _timeTotal=0.0;
    QPainter *_painter=nullptr;
    //计时器
    QTimer *_timer=new QTimer;
    //map容器存储水果的颜色
    map<int,pair<pair<QColor,QColor>,double>> _kind;
    //游戏区域的背景颜色
    QColor _backGround=QColor(255,203,183);
    //定义画笔，让QPainter知道画线条和线条样式，QBrush画笔填充的颜色
    QPen _redLine=QPen(QBrush(Qt::red),5,Qt::DashDotLine);
    //用list容器存储水果
    list<pair<Fruit, int>> _fruits;
    double _score=0.0;
    QPointF curPos;
    bool isReleased;

};
#endif // WIDGET_H
